// 导入阿里云短信服务所需的模块
const {default: Esc20140526, SendSmsRequest,QuerySendDetailsRequest} = require('@alicloud/dysmsapi20170525');
const {Config} = require('@alicloud/openapi-client');
const {RuntimeOptions} = require('@alicloud/tea-util');

const result = require('@/config/handle');
// 引入时间处理模块
const moment = require('moment')
moment.locale('zh-cn');

// 导入配置文件，包含账户信息
const account = require('@/config/Account');

// 创建阿里云短信服务的配置对象，并设置访问密钥
let config = new Config({
  accessKeyId: account.ALI_KEYID,
  accessKeySecret: account.ALI_KEYSECRET
});

// 创建阿里云短信客户端实例
const client = new Esc20140526(config);

// 创建运行时选项实例
const runtime = new RuntimeOptions({});

// 导入生成验证码的方法
const {generateCode} = require('@/alicode/gencode');

// 发送验证码函数
const VerCode = async(phoneNumbers) => {
    // 创建发送短信请求对象
    let sendSmsRequest = new SendSmsRequest({
        phoneNumbers: phoneNumbers, // 目标手机号码
        signName: account.ALI_SIGNNAME, // 短信签名名称
        templateCode: account.ALI_CODE, // 模板编码
        templateParam: `{"code":${generateCode()}}`, // 模板参数，其中包含动态生成的验证码
    });

    try {
        // 使用客户端发送短信并处理异步操作
        const res = await client.sendSmsWithOptions(sendSmsRequest, runtime);
        return res
    } catch (error) {
        throw new result('发送验证码失败', 500, error);
    }
}

//验证验证码是否正确
const queryCode = async (phoneNumbers,bizId,code)=>{
  const sendDate = moment().format('YYYYMMDD');
  let querySendDetailsRequest = new QuerySendDetailsRequest({
    phoneNumber: phoneNumbers,
    bizId,
    sendDate,
    pageSize: 10,
    currentPage: 1,
  });

  try {
    const res = await client.querySendDetailsWithOptions(querySendDetailsRequest, runtime);
    if(res.body.code === 'OK'){
      if(res.body.smsSendDetailDTOs.smsSendDetailDTO.length===0){
        throw {message:'手机未发送过验证码',code:422}
      }else {
        const str = res.body.smsSendDetailDTOs.smsSendDetailDTO[0].content
        const nums = str.match(/\d+/g).map(Number)
        if(code == nums[0]){
        return 'SUCCESS'
        }else {
          throw {message:'验证码错误',code:422}
        }
      }
    }else{
      throw {message:res.body.message,code:422}
    }
  } catch (error) {
   throw new result(
    error.message ? error.message : '发生未知错误',
    error.code ? error.code : 500,
    error.message ? null : error
   )
  }
}

// 导出发送验证码函数供其他模块使用
module.exports = {
  VerCode,
  queryCode
}